package jp.dev7.android.util;

import android.os.Handler;
import android.os.Message;

/**
 * バックグラウンド処理を行う.
 * 
 * @author narazaki.daishi
 * 
 * @param <T>
 *            処理結果の型
 */
public interface Worker<T> {

    /**
     * 処理結果.
     */
    public static final String RESULT = "jp.dev7.android.util.Worker.RESULT";

    /**
     * 処理中に発生した例外.
     */
    public static final String ERROR = "jp.dev7.android.util.Worker.ERROR";

    /**
     * バックグラウンド処理を開始する.
     * 
     * 処理完了時、handlerに対し{@link Message}を送出する。
     * {@link Handler#handleMessage(Message)}で受け取ること。
     * 
     * @param handler
     *            処理完了通知を受け取る
     */
    void execute(Handler handler);

    /**
     * バックグラウンド処理を中止する.
     */
    void cancel();

    /**
     * @return 処理が中止されているか
     */
    boolean isCanceled();

    /**
     * @return 処理が完了しているか
     */
    boolean isCompleted();

}
